package heap

// SymRef 4种类型符号共有特性
// 类符号 class_ref  字段符号 member_ref 方法符号 method_ref  接口方法符号引用
type SymRef struct {
	cp        *ConstantPool
	className string
	class     *Class
}

func (e *SymRef) ResolvedClass() *Class {
	if e.class == nil {
		e.resolvedClassRef()
	}
	return e.class
}

func (e *SymRef) resolvedClassRef() {
	clazz := e.cp.class
	class := clazz.loader.LoadClass(e.className)
	if !class.isAccessibleTo(clazz) {
		panic("java.lang.IllegalAccessError")
	}
	e.class = class
}
